import axios from "axios";

import nProgress from "nprogress";
import "nprogress/nprogress.css"

const request = axios.create({
  baseURL: process.env.VUE_APP_MOCKAPI,
  timeout: 10000
});

// 请求拦截器(处理失败的回调函数会有两种触发方式：1.多个请求拦截器，前一个报错会触发后一个的失败回调 2.传递参数主动触发)
request.interceptors.request.use((config) => {
  nProgress.start()
  return config
}, (error) => {
  nProgress.done()
  // 在 axios 的语法中，该回调函数类似于 promise 的 then() 要在 then() 中返回一个失败的 promise : 1.抛出异常 2.返回一个失败 promise 实例
  return Promise.reject(error.message)
})

// 响应拦截器
request.interceptors.response.use((res) => {
  nProgress.done()
  if (res.data.code !== 200) {
    return Promise.reject({message: res.data.message})
  }
  return res.data.data
}, (error) => {
  nProgress.done()
  return Promise.reject(error.message)
})

export default request